package com.example.furniture.service.impl;

import com.example.furniture.dto.LoginRequest;
import com.example.furniture.dto.LoginResponse;
import com.example.furniture.entity.User;
import com.example.furniture.mapper.UserMapper;
import com.example.furniture.service.AuthService;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 认证服务实现类
 * 提供用户认证相关的业务逻辑处理
 * 
 * @author 家具商城系统
 * @version 1.0
 * @since 2024-01-01
 */
@Service
public class AuthServiceImpl implements AuthService {

    private static final Logger logger = LoggerFactory.getLogger(AuthServiceImpl.class);
    private final UserMapper userMapper;

    /**
     * 构造函数，注入依赖
     * 
     * @param userMapper 用户数据访问层
     */
    public AuthServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    /**
     * 用户登录
     * 
     * @param loginRequest 登录请求
     * @return 登录响应
     */
    @Override
    public LoginResponse login(LoginRequest loginRequest) {
        logger.info("用户登录尝试: {}", loginRequest.getUsername());
        
        try {
            // 根据用户名查找用户
            User user = findUserByUsername(loginRequest.getUsername());
            if (user == null) {
                logger.warn("用户不存在: {}", loginRequest.getUsername());
                throw new RuntimeException("用户名或密码错误");
            }
            
            // 验证密码（简单明文比较）
            if (!loginRequest.getPassword().equals(user.getPassword())) {
                logger.warn("密码错误: {}", loginRequest.getUsername());
                throw new RuntimeException("用户名或密码错误");
            }
            
            // 创建用户信息
            LoginResponse.UserInfo userInfo = new LoginResponse.UserInfo(
                user.getId(), 
                user.getUsername(), 
                user.getEmail()
            );
            
            // 创建登录响应（无令牌）
            LoginResponse response = new LoginResponse("", 0L, userInfo);
            
            logger.info("用户登录成功: {}", user.getUsername());
            return response;
            
        } catch (Exception e) {
            logger.error("用户登录失败: {}", loginRequest.getUsername(), e);
            throw new RuntimeException("登录失败: " + e.getMessage());
        }
    }

    /**
     * 验证令牌（简化版，总是返回true）
     * 
     * @param token 令牌
     * @return 是否有效
     */
    @Override
    public boolean validateToken(String token) {
        return true; // 简化版，总是返回true
    }

    /**
     * 从令牌中获取用户名（简化版）
     * 
     * @param token 令牌
     * @return 用户名
     */
    @Override
    public String getUsernameFromToken(String token) {
        return "admin"; // 简化版，返回默认用户名
    }

    /**
     * 根据用户名查找用户
     * 
     * @param username 用户名
     * @return 用户信息
     */
    private User findUserByUsername(String username) {
        // 这里需要添加根据用户名查找用户的方法
        // 目前简化处理，实际项目中应该在UserMapper中添加相应方法
        try {
            // 临时实现：获取所有用户然后查找
            return userMapper.selectAll().stream()
                .filter(user -> username.equals(user.getUsername()))
                .findFirst()
                .orElse(null);
        } catch (Exception e) {
            logger.error("查找用户失败: {}", username, e);
            return null;
        }
    }
}
